<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<!-- Mirrored from www.wolfssl.com/wolfSSL/Docs-wolfssl-utasker.html by HTTrack Website Copier/3.x [XR&CO'2014], Tue, 17 Jan 2017 13:28:54 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=UTF-8" /><!-- /Added by HTTrack -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="Generator" content="iWeb 3.0.4"/>
<meta name="iWeb-Build" content="local-build-20170103"/>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
<meta name="viewport" content="width=770"/>
<title>wolfSSL - Docs | uTasker</title>
<link rel="stylesheet" type="text/css" media="screen,print" href="Docs-wolfssl-utasker_files/Docs-wolfssl-utasker.css"/>
<!--[if lt IE 8]><link rel='stylesheet' type='text/css' media='screen,print' href='Docs-wolfssl-utasker_files/Docs-wolfssl-utaskerIE.css'/><![endif]-->
<!--[if gte IE 8]><link rel='stylesheet' type='text/css' media='screen,print' href='Media/IE8.css'/><![endif]-->
<script type="text/javascript" src="Scripts/iWebSite.js"></script>
<script type="text/javascript" src="Docs-wolfssl-utasker_files/Docs-wolfssl-utasker.js"></script>
<meta name="description" content="wolfSSL embedded SSL/TLS support for uTasker OS and stack."/><meta name="keywords" content="embedded ssl, ssl library, utasker ssl, utasker tls, utasker secure, openssl alternative, openssl replacement, cyassl, stream ciphers ssl, aes-ni ssl, dtls, mysql ssl, portable ssl, ssl portable, portable tls, small openssl, smart grid, connected home, ecc, lightweight ssl, suite b, encryption security software, ssl inspection"/><meta name="robots" content="follow,index"/> <script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','../../www.google-analytics.com/analytics.js','ga');ga('create','UA-64826966-1','auto');ga('send','pageview');</script>
 
<script>//<![CDATA[
window.zEmbed||function(e,t){var n,o,d,i,s,a=[],r=document.createElement("iframe");window.zEmbed=function(){a.push(arguments)},window.zE=window.zE||window.zEmbed,r.src="javascript:false",r.title="",r.role="presentation",(r.frameElement||r).style.cssText="display: none",d=document.getElementsByTagName("script"),d=d[d.length-1],d.parentNode.insertBefore(r,d),i=r.contentWindow,s=i.document;try{o=s}catch(c){n=document.domain,r.src='javascript:var d=document.open();d.domain="'+n+'";void(0);',o=s}o.open()._l=function(){var o=this.createElement("script");n&&(this.domain=n),o.id="js-iframe-async",o.src=e,this.t=+new Date,this.zendeskHost=t,this.zEQueue=a,this.body.appendChild(o)},o.write('<body onload="document._l();">'),o.close()}("../../assets.zendesk.com/embeddable_framework/main.js","wolfssl.zendesk.com");
//]]></script>
  </head>
<body style="background: rgb(255, 255, 255); margin: 0pt; " onload="onPageLoad();">
<div style="text-align: center; ">
<div style="margin-bottom: 20px; margin-left: auto; margin-right: auto; margin-top: 20px; overflow: hidden; position: relative; word-wrap: break-word;  background: rgb(255, 255, 255); text-align: left; width: 770px; " id="body_content">
<div style="float: left; margin-left: 0px; position: relative; width: 770px; z-index: 0; " id="nav_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
<div style="clear: both; height: 0px; line-height: 0px; " class="spacer"> </div>
</div>
<div style="float: left; height: 0px; line-height: 0px; margin-left: 0px; position: relative; width: 770px; z-index: 10; " id="header_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
</div>
<div style="margin-left: 0px; position: relative; width: 770px; z-index: 5; " id="body_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
<div id="id1" style="height: 38px; left: 375px; position: absolute; top: 157px; width: 361px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_361_38" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style">Using wolfSSL with uTasker</p>
</div>
</div>
</div>
<div id="id2" style="height: 5807px; left: 35px; position: absolute; top: 231px; width: 701px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_701_5807" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-top: 0pt; " class="paragraph_style_1">Introduction<span class="style"><br/></span></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">wolfSSL is happy to announce that the wolfSSL embedded SSL/TLS and wolfCrypt cryptography libraries have been ported to the uTasker operating system.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2"><a title="http://www.utasker.com/index.html" href="http://www.utasker.com/index.html">uTasker</a> is an operating system, stack, and collection of services designed for embedded devices.  It includes an OS, filesystem, device drivers, and TCP/IP stack among other features.  The uTasker package includes a device simulator, allowing developers to test and debug code faster than would be possible on physical hardware itself.  Complete details on the uTasker stack can be found on the project website: <a title="http://www.utasker.com/" href="http://www.utasker.com/">http://www.utasker.com/</a>.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">This document describes the wolfSSL uTasker port and how to use wolfSSL in a uTasker-based project to secure socket connections.  This document should act as a supplement to the <a title="https://wolfssl.com/wolfSSL/Docs-wolfssl-manual-toc.html" href="Docs-wolfssl-manual-toc.html">wolfSSL Manual</a>.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_3">Table of Contents<br/></p>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>1.  wolfSSL Source Files<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>2.  wolfSSL uTasker Configuration<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>3.  Standard Library Usage<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>4.  Time Functionality<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>5.  I/O Callbacks<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>6.  Debug Message Logging<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>7.  Random Number Generation<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>8.  Filesystem Integration<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>9.  Cryptography Verification<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>10.  Using wolfSSL with uTasker<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>11.  Example Projects<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>12.  Additional Tuning Resources<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>13.  Support<br/></p>
</li>
</ol>
<p class="paragraph_style_5"><br/></p>
<p class="paragraph_style_3">1. wolfSSL Source Files<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The wolfSSL and wolfCrypt libraries are dual-licensed under both GPLv2 and a standard commercial license. This dual-license model makes it easy to evaluate, test and prototype with the GPLv2-licensed code then seamlessly migrate to the commercially-licensed sources if necessary.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The GPLv2-licensed version of wolfSSL may be downloaded from the wolfSSL website:<br/></p>
<p class="paragraph_style_2"><a title="https://wolfssl.com/wolfSSL/download/downloadForm.php" href="https://wolfssl.com/wolfSSL/download/downloadForm.php">https://wolfssl.com/wolfSSL/download/downloadForm.php</a><br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">After downloading the wolfSSL package, the wolfSSL and wolfCrypt source code should be added to a uTasker project file structure.  If using the “uTaskerV1.4” project as a base, a logical location for the wolfSSL source files would be:<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_6">uTasker_M522XX_V1.4-6_npw\Applications\uTaskerV1.4\wolfssl<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The structure of the “wolfssl” directory should remain intact for ease of future upgrades.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">Specific areas of interest in the wolfSSL package structure include:<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_6">wolfssl\wolfssl[TLS and crypto header files]<br/></p>
<p class="paragraph_style_6">wolfssl\src     [TLS source files]<br/></p>
<p class="paragraph_style_6">wolfssl\wolfcrypt\src[crypto source files]<br/></p>
<p class="paragraph_style_6">wolfssl\wolfcrypt\test\test.c      [cryptography test code]<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">Source and header files from these locations should be added to the uTasker project.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">wolfSSL has added a new preprocessor define to enable the uTasker port layer called <span class="style_1">WOLFSSL_UTASKER</span>.  The port currently includes example client and server uTasker tasks which make use of the wolfSSL I/O abstraction layer to send and receive data over a secure SSL/TLS connection using uTasker RAW sockets.  The example tasks have been tested using the uTasker device simulator contained in the “uTasker_M522XX_V1.4-6” distribution.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">What this means for projects using uTasker is that network connections can now communicate securely over SSL/TLS, using the progressive and lightweight wolfSSL SSL/TLS library.  Applications can also take advantage of the underlying wolfCrypt cryptography library to access crypto operations directly (block ciphers, stream ciphers, AEAD ciphers, hash functions, public key algorithms, and certificate verification routines).<br/></p>
<p class="paragraph_style_3"><br/></p>
<p class="paragraph_style_3">2. wolfSSL uTasker Configuration<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The wolfSSL library configuration for uTasker is located in the following file:<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_6">wolfssl\wolfssl\wolfcrypt\settings.h<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The <span class="style_1">WOLFSSL_UTASKER</span> define should be uncommented at the top of the file.  This enables the WOLFSSL_UTASKER port layer.<br/></p>
<p class="paragraph_style_3"><br/></p>
<p class="paragraph_style_3">3. Standard Library Usage<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">wolfSSL contains a standard library abstraction layer which allows ports and/or applications to use different standard library calls than the defaults.  The wolfSSL uTasker port has been modified to use the available uTasker standard library replacement functions where possible, and falls back to the regular standard library functions where replacements are not available in uTasker.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The following code section from settings.h is responsible for mapping these functions:<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_7">/* use uTasker std library replacements where available */<br/></p>
<p class="paragraph_style_6">#define STRING_USER<br/></p>
<p class="paragraph_style_6">#define XMEMCPY(d,s,l)         <span class="style_1">uMemcpy</span>((d),(s),(l))<br/></p>
<p class="paragraph_style_6">#define XMEMSET(b,c,l)         <span class="style_1">uMemset</span>((b),(c),(l))<br/></p>
<p class="paragraph_style_6">#define XMEMCMP(s1,s2,n)       <span class="style_1">uMemcmp</span>((s1),(s2),(n))<br/></p>
<p class="paragraph_style_6">#define XMEMMOVE(d,s,l)        memmove((d),(s),(l))<br/></p>
<p class="paragraph_style_6"><br/></p>
<p class="paragraph_style_6">#define XSTRLEN(s1)            <span class="style_1">uStrlen</span>((s1))<br/></p>
<p class="paragraph_style_6">#define XSTRNCPY(s1,s2,n)      strncpy((s1),(s2),(n))<br/></p>
<p class="paragraph_style_6">#define XSTRSTR(s1,s2)         strstr((s1),(s2))<br/></p>
<p class="paragraph_style_6">#define XSTRNSTR(s1,s2,n)      mystrnstr((s1),(s2),(n))<br/></p>
<p class="paragraph_style_6">#define XSTRNCMP(s1,s2,n)      strncmp((s1),(s2),(n))<br/></p>
<p class="paragraph_style_6">#define XSTRNCAT(s1,s2,n)      strncat((s1),(s2),(n))<br/></p>
<p class="paragraph_style_6">#define XSTRNCASECMP(s1,s2,n)  _strnicmp((s1),(s2),(n))<br/></p>
<p class="paragraph_style_6">#if defined(WOLFSSL_CERT_EXT) || defined(HAVE_ALPN)<br/></p>
<p class="paragraph_style_6">    #define XSTRTOK            strtok_r<br/></p>
<p class="paragraph_style_6">#endif<br/></p>
<p class="paragraph_style_3"><br/></p>
<p class="paragraph_style_3">4. Time Functionality<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">wolfSSL uses time functionality in two locations:<br/></p>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 18px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_8"><span style="font-size: 0px; position: relative; top: -8px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>1.  Session Cache Expiration<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_9"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>A wolfSSL server contains a session cache which allows clients to resume a previously-negotiated session.  A resumed session has the performance advantage of being able to skip several steps in the SSL/TLS handshake that were performed the first time the session was initiated.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_9"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_9"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>To manage the expiration of sessions in the session cache, wolfSSL requires that the following function in “wolfssl\src\internal.c” return a count in seconds.  This needs to have second accuracy, but does not need to be correlated to an accurate time source.  The following is the default <span class="style_2">LowResTimer</span>() implementation used in the wolfSSL uTasker port:<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_9"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>word32 <span class="style_1">LowResTimer</span>(void)<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>{<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>    return (word32)(uTaskerSystemTick / TICK_RESOLUTION);<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>}<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 18px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_8"><span style="font-size: 0px; position: relative; top: -8px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>2.  Certificate Date Range Validation<br/></p>
</li>
</ol>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_9"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>wolfSSL needs the number of seconds since the Unix epoch in order to correctly validate “Not Before” and “Not After” validity ranges in certificates.  This is used during the peer authentication steps as part of the SSL/TLS handshake process.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_9"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_9"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>The wolfSSL uTasker port requires that the user defines <span class="style_1">XTIME</span> in <span class="style_2">settings.h</span> to a function that will return the number of seconds since the Unix epoch.  <span class="style_1">USER_TIME</span> also needs to be defined in settings.h.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_9"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_9"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>The following note can be found in the WOLFSSL_UTASKER block in wolfSSL’s settings.h file:<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_9"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_11"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>/* User needs to define XTIME to function that provides<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_11"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span> * seconds since Unix epoch. */<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>#ifndef <span class="style_1">XTIME</span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>    #error User must define XTIME in wolfSSL settings.h<br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>    <span class="style_3">/* #define </span><span class="style_4">XTIME</span><span class="style_3"> fnSecondsSinceEpoch */</span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_10"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>#endif<br/></p>
</li>
</ol>
<p class="paragraph_style_3"><br/></p>
<p class="paragraph_style_3">5. Input / Output Callbacks<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">wolfSSL provides the functionality for applications to write and register custom Send and Receive callbacks.  Whenever wolfSSL wants or needs to send data to advance the internal SSL/TLS state machine, wolfSSL will call the <span class="style_1">SEND</span> callback.  Likewise, whenever wolfSSL needs to receive data, it will call the <span class="style_1">RECEIVE</span> callback.  Application layer API functions which end up calling these callbacks include functions such as wolfSSL_connect(), wolfSSL_accept(), wolfSSL_read(), and wolfSSL_write().<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The wolfSSL uTasker Kickstart included the creation of custom Send/Receive callbacks that work with uTasker RAW sockets and example tasks.  These can be found in the wolfSSL uTasker example client task (<span class="style_1">wolfSSLClientTask.c</span>):<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_7">/*<br/></p>
<p class="paragraph_style_7"> * wolfSSL send callback<br/></p>
<p class="paragraph_style_7"> *<br/></p>
<p class="paragraph_style_7"> * This function is called by wolfSSL whenever it needs to send data.<br/></p>
<p class="paragraph_style_7"> * Returns number of bytes sent, or negative error.<br/></p>
<p class="paragraph_style_7"> * WOLFSSL_CBIO_ERR_WANT_WRITE should be returned if more data is<br/></p>
<p class="paragraph_style_7"> * needed to be sent and wolfSSL should call this function again.<br/></p>
<p class="paragraph_style_7"> */<br/></p>
<p class="paragraph_style_6">int <span class="style_1">UTasker_Send</span>(WOLFSSL* ssl, char* buf, int sz, void* ctx);<br/></p>
<p class="paragraph_style_6"><br/></p>
<p class="paragraph_style_7">/*<br/></p>
<p class="paragraph_style_7"> * wolfSSL receive callback<br/></p>
<p class="paragraph_style_7"> *<br/></p>
<p class="paragraph_style_7"> * This function is called by wolfSSL whenever it needs to read data.<br/></p>
<p class="paragraph_style_7"> * Returns number of bytes received, or negative error.<br/></p>
<p class="paragraph_style_7"> * WOLFSSL_CBIO_ERR_WANT_READ should be returned if more data is<br/></p>
<p class="paragraph_style_7"> * needed to be read and wolfSSL should call this function again.<br/></p>
<p class="paragraph_style_7"> */<br/></p>
<p class="paragraph_style_6">int <span class="style_1">UTasker_Receive</span>(WOLFSSL* ssl, char* buf, int sz, void* ctx);<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The job of the <span class="style_1">UTasker_Receive</span> callback is to place data into the provided buffer “<span class="style_1">buf</span>”. wolfSSL asks for “<span class="style_1">sz</span>” bytes of data, but if the callback has less data than requested, it can copy the number of bytes it has available into “buf” and return the number of bytes that have been written.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The job of the <span class="style_1">UTasker_Send</span> callback is to send the data in the buffer “<span class="style_1">buf</span>” to the peer. The number of bytes in “buf” is given to the callback through the “<span class="style_1">sz</span>” parameter. If the callback is only able to send part of the data in “buf”, it should return the number of bytes that were sent.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">These callbacks are registered with wolfSSL by the application using:<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_7">/* register wolfSSL send/recv callbacks */<br/></p>
<p class="paragraph_style_6">void <span class="style_1">wolfSSL_SetIOSend</span>(WOLFSSL_CTX* ctx, CallbackIOSend CBIOSend);<br/></p>
<p class="paragraph_style_6">void <span class="style_1">wolfSSL_SetIORecv</span>(WOLFSSL_CTX* ctx, CallbackIORecv CBIORecv);<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">Accompanying these callbacks are a “context” structure that is used for each.  A pointer to these custom structures are passed to the SEND and RECEIVE callbacks through the fourth parameter (“ctx”).  With the uTasker examples, this context is what the callbacks use to know how to access data buffers, socket descriptors, and ACK flags.  The I/O context structures can be found in the example client task (<span class="style_1">wolfSSLClientTask.c</span>) or server task (<span class="style_1">wolfSSLServerTask.c</span>):<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_7">/* wolfSSL send callback context struct */<br/></p>
<p class="paragraph_style_6">typedef struct stUTASKER_SENDCTX {<br/></p>
<p class="paragraph_style_6">TCP_MESSAGE*  message;<span class="style_3">/* TCP frame to send */</span><br/></p>
<p class="paragraph_style_6">USOCKET*      socket;<span class="style_3">/* socket pointer */</span><br/></p>
<p class="paragraph_style_6">unsigned int  dataLen;<span class="style_3">/* length of data in message frame*/</span><br/></p>
<p class="paragraph_style_6">unsigned char ackd;     <span class="style_3">/* has ACK been received for data */</span><br/></p>
<p class="paragraph_style_6">unsigned char flags;<span class="style_3">/* socket flags, ie: TCP_FLAG_PUSH*/</span><br/></p>
<p class="paragraph_style_6">} <span class="style_1">UTASKER_SENDCTX</span>;<br/></p>
<p class="paragraph_style_6"><br/></p>
<p class="paragraph_style_6"><br/></p>
<p class="paragraph_style_7">/* wolfSSL recv callback context struct */<br/></p>
<p class="paragraph_style_6">typedef struct stUTASKER_RECVCTX {<br/></p>
<p class="paragraph_style_6">USOCKET*       socket;<span class="style_3">/* socket pointer */</span><br/></p>
<p class="paragraph_style_6">unsigned int   used;<span class="style_3">/* bytes used in buffer */</span><br/></p>
<p class="paragraph_style_6">unsigned int   offset;<span class="style_3">/* current offset in buffer */</span><br/></p>
<p class="paragraph_style_6">unsigned int   bufLen;<span class="style_3">/* total size of buffer in bytes */</span><br/></p>
<p class="paragraph_style_6">unsigned char* buffer;<span class="style_3">/* recv data buffer */</span><br/></p>
<p class="paragraph_style_6">} <span class="style_1">UTASKER_RECVCTX</span>;<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The I/O contexts are registered by the application using:<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_6">void <span class="style_1">wolfSSL_SetIOReadCtx</span>( WOLFSSL* ssl, void *ctx);<br/></p>
<p class="paragraph_style_6">void <span class="style_1">wolfSSL_SetIOWriteCtx</span>(WOLFSSL* ssl, void *ctx);<br/></p>
<p class="paragraph_style_3"><br/></p>
<p class="paragraph_style_3">6. Debug Message Logging<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">wolfSSL has the ability to output internal debug messages at runtime.  To enable debugging, wolfSSL must be compiled with <span class="style_1">DEBUG_WOLFSSL</span> defined, and the application must call <span class="style_1">wolfSSL_Debugging_ON</span>() before any other wolfSSL calls.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The wolfSSL uTasker port by default will call <span class="style_1">fnDebugMsg</span>() to output debug messages.  If a different output channel is desired by the user for debug messages, the application can write and register a custom Logging Callback with wolfSSL.  Instructions on doing this can be found in <a title="Docs-wolfssl-manual-8-debugging.html" href="Docs-wolfssl-manual-8-debugging.html">Section 8.1 of the wolfSSL Manual</a>.<br/></p>
<p class="paragraph_style_3"><br/></p>
<p class="paragraph_style_3">7. Random Number Generation<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">wolfSSL uses the uTasker <span class="style_1">fnRandom</span>() function as an entropy source for seeding the wolfCrypt PRNG.  This is mapped/registered with wolfSSL in &lt;wolfssl/wolfcrypt/settings.h&gt;.<br/></p>
<p class="paragraph_style_3"><br/></p>
<p class="paragraph_style_3">8. Filesystem Integration<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The wolfSSL uTasker port does not include filesystem support at this time.  Applications should load certificates and keys through memory buffers (C arrays).  API functions to do this can be found in <a title="Docs-wolfssl-manual-17-2-wolfssl-api-certificates-keys.html" href="Docs-wolfssl-manual-17-2-wolfssl-api-certificates-keys.html">Section 17.2 of the wolfSSL Manual</a>.<br/></p>
<p class="paragraph_style_3"><br/></p>
<p class="paragraph_style_3">9. Cryptographic Verification<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The wolfCrypt cryptography algorithms were verified for correct operation on the uTasker Simulator using the wolfCrypt tests found in the example client task.  When the example client or server tasks are run, the first thing that will happen is that the crypto tests will run.  Output should be similar to:<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_6">Starting wolfSSL Server Task<br/></p>
<p class="paragraph_style_6">MD5      test passed!<br/></p>
<p class="paragraph_style_6">MD4      test passed!<br/></p>
<p class="paragraph_style_6">SHA      test passed!<br/></p>
<p class="paragraph_style_6">SHA-256  test passed!<br/></p>
<p class="paragraph_style_6">HMAC-MD5 test passed!<br/></p>
<p class="paragraph_style_6">HMAC-SHA test passed!<br/></p>
<p class="paragraph_style_6">HMAC-SHA256 test passed!<br/></p>
<p class="paragraph_style_6">ARC4     test passed!<br/></p>
<p class="paragraph_style_6">HC-128   test passed!<br/></p>
<p class="paragraph_style_6">Rabbit   test passed!<br/></p>
<p class="paragraph_style_6">DES      test passed!<br/></p>
<p class="paragraph_style_6">DES3     test passed!<br/></p>
<p class="paragraph_style_6">AES      test passed!<br/></p>
<p class="paragraph_style_6">RANDOM   test passed!<br/></p>
<p class="paragraph_style_6">RSA      test passed!<br/></p>
<p class="paragraph_style_6">DH       test passed!<br/></p>
<p class="paragraph_style_6">DSA      test passed!<br/></p>
<p class="paragraph_style_6">PWDBASED test passed!<br/></p>
<p class="paragraph_style_6">ECC      test passed!<br/></p>
<p class="paragraph_style_6">STATUS: wolfCrypt Tests Passed!<br/></p>
<p class="paragraph_style_3"><br/></p>
<p class="paragraph_style_3">10. Using wolfSSL with uTasker<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">Before using wolfSSL in a uTasker-based project, the following will need to be done.  These are mentioned in more detail above:<br/></p>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="1">
<p style="text-indent: -15px; " class="paragraph_style_12"><span style="font-size: 12px; " class="Bullet">1.</span><span style="width: 5px; " class="inline-block"></span>Add wolfSSL and wolfCrypt source and header files to uTasker project.<br/></p>
</li>
</ol>
<p class="paragraph_style_13"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="2">
<p style="text-indent: -15px; " class="paragraph_style_12"><span style="font-size: 12px; " class="Bullet">2.</span><span style="width: 5px; " class="inline-block"></span>Make sure <span class="style_1">WOLFSSL_UTASKER</span> is uncommented in ./wolfssl/wolfcrypt/settings.h, or defined either at the Visual Studio project preprocessor settings level or in user_settings.h if HAVE_USER_SETTINGS is defined.<br/></p>
</li>
</ol>
<p class="paragraph_style_13"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="3">
<p style="text-indent: -15px; " class="paragraph_style_12"><span style="font-size: 12px; " class="Bullet">3.</span><span style="width: 5px; " class="inline-block"></span>Define <span class="style_1">XTIME</span> in settings.h (or user_settings.h if <span class="style_1">HAVE_USER_SETTINGS</span> has been defined) to an appropriate function which returns seconds since the Unix epoch.  See note in WOLFSSL_UTASKER block of settings.h.<br/></p>
</li>
</ol>
<p class="paragraph_style_13"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="4">
<p style="text-indent: -15px; " class="paragraph_style_12"><span style="font-size: 12px; " class="Bullet">4.</span><span style="width: 5px; " class="inline-block"></span>Register Send/Recv callbacks and contexts with wolfSSL from the application code.  See Section 5 above.  Sample callbacks from the client and server example tasks can be used, or custom ones can be written.<br/></p>
</li>
</ol>
<p class="paragraph_style_13"><br/></p>
<ol>
<li style="line-height: 15px; padding-left: 30px; text-indent: -15px; " class="full-width" value="5">
<p style="text-indent: -15px; " class="paragraph_style_12"><span style="font-size: 12px; " class="Bullet">5.</span><span style="width: 5px; " class="inline-block"></span>API documentation for wolfSSL can be found in the <a title="Docs-wolfssl-manual-toc.html" href="Docs-wolfssl-manual-toc.html">wolfSSL Manual</a>.<br/></p>
</li>
</ol>
<p class="paragraph_style_3"><br/></p>
<p class="paragraph_style_3">11. Example Projects<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">wolfSSL has created two example tasks that demonstrate wolfSSL usage with uTasker and RAW sockets.  These task are available in the wolfSSL examples repository:<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2"><a title="https://github.com/wolfSSL/wolfssl-examples/tree/master/utasker" href="https://github.com/wolfSSL/wolfssl-examples/tree/master/utasker">wolfSSL uTasker Examples</a><br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The uTasker Simulator IP address, Netmask, Gateway, and DNS server need to be set accordingly in UTasker’s <span class="style_2">application.c</span>.<br/></p>
<p class="paragraph_style_2"><br/></p>
<ol>
<li style="line-height: 18px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_8"><span style="font-size: 0px; position: relative; top: -8px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>1. Example Client Task<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>Location: <span class="style_2">wolfSSLClientTask.c</span> / <span class="style_2">wolfSSLClientTask.h<br/></span></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>The example client task:<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="1">
<p style="text-indent: -15px; " class="paragraph_style_14"><span style="font-size: 12px; " class="Bullet">a.</span><span style="width: 5px; " class="inline-block"></span>Runs cryptography tests to verify algorithms are working correctly in environment.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="2">
<p style="text-indent: -15px; " class="paragraph_style_14"><span style="font-size: 12px; " class="Bullet">b.</span><span style="width: 5px; " class="inline-block"></span>Creates and connects a TCP socket to <a title="https://www.example.com/" href="https://www.example.com/">https://www.example.com</a> (93.184.216.34, port 443) by default.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="3">
<p style="text-indent: -15px; " class="paragraph_style_14"><span style="font-size: 12px; " class="Bullet">c.</span><span style="width: 6px; " class="inline-block"></span>Initializes and sets up wolfSSL library and SSL/TLS context, loading CA certificate used to verify server certificate chain.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="4">
<p style="text-indent: -15px; " class="paragraph_style_14"><span style="font-size: 12px; " class="Bullet">d.</span><span style="width: 5px; " class="inline-block"></span>After socket is connected, performs SSL/TLS handshake by calling wolfSSL_connect().<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="5">
<p style="text-indent: -15px; " class="paragraph_style_14"><span style="font-size: 12px; " class="Bullet">e.</span><span style="width: 5px; " class="inline-block"></span>Sends a simple HTTP GET message to the server.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="6">
<p style="text-indent: -15px; " class="paragraph_style_14"><span style="font-size: 12px; " class="Bullet">f.</span><span style="width: 8px; " class="inline-block"></span>Receives and prints server response.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="7">
<p style="text-indent: -15px; " class="paragraph_style_14"><span style="font-size: 12px; " class="Bullet">g.</span><span style="width: 5px; " class="inline-block"></span>Shuts down socket, frees SSL/TLS resources.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>The example client task contains Send and Receive callback functions which are registered with wolfSSL.  The CA certificate buffer is located in the wolfSSLClientTask.h header file.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 18px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_8"><span style="font-size: 0px; position: relative; top: -8px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>2. Example Server Task<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>Location: <span class="style_2">wolfSSLServerTask.c</span> / <span class="style_2">wolfSSLServerTask.h</span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>The example server task:<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="1">
<p style="text-indent: -15px; " class="paragraph_style_14"><span style="font-size: 12px; " class="Bullet">a.</span><span style="width: 5px; " class="inline-block"></span>Runs cryptography tests to verify algorithms are working correctly in environment.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="2">
<p style="text-indent: -15px; " class="paragraph_style_14"><span style="font-size: 12px; " class="Bullet">b.</span><span style="width: 5px; " class="inline-block"></span>Sets up the SSL/TLS context, loading server certificate and key file.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="3">
<p style="text-indent: -15px; " class="paragraph_style_14"><span style="font-size: 12px; " class="Bullet">c.</span><span style="width: 6px; " class="inline-block"></span>Creates a TCP socket and sets the socket to listen mode.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="4">
<p style="text-indent: -15px; " class="paragraph_style_14"><span style="font-size: 12px; " class="Bullet">d.</span><span style="width: 5px; " class="inline-block"></span>Once a client connection is received, creates SSL/TLS session.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="5">
<p style="text-indent: -15px; " class="paragraph_style_14"><span style="font-size: 12px; " class="Bullet">e.</span><span style="width: 5px; " class="inline-block"></span>Receives a message from the client (ie: ‘hello wolfssl!’).<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="6">
<p style="text-indent: -15px; " class="paragraph_style_14"><span style="font-size: 12px; " class="Bullet">f.</span><span style="width: 8px; " class="inline-block"></span>Sends back a message to the server (ie: ‘I hear you fa shizzle!’)<br/></p>
</li>
<li style="line-height: 15px; padding-left: 45px; text-indent: -15px; " class="full-width" value="7">
<p style="text-indent: -15px; " class="paragraph_style_14"><span style="font-size: 12px; " class="Bullet">g.</span><span style="width: 5px; " class="inline-block"></span>Closes connection, frees resources, loops back around to c) above to wait for another client connection.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>The example server task uses the same Send/Receive callbacks from wolfSSLClientTask.c.  Server certificate and key buffers are located in wolfSSLServerTask.c, and correspond to the example server certificate and key that ship with the wolfSSL package under the “./certs” directory.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>This server task has been set up to receive connections from the wolfSSL proper example client (./examples/client/client).  The wolfSSL example client can be compiled and run from the wolfSSL package by following steps similar to the below.  These steps are for a Unix/Linux type environment.  For Windows users, wolfSSL includes a Visual Studio solution file that compiles the wolfSSL examples and library.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>$ cd wolfssl-3.9.0-commercial<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>$ ./configure<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>$ make<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>$ ./examples/client/client -h 192.168.1.144 -p 443<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>The “-h” option specifies the host to connect to, while the “-p” option specifies the port.  Running the main wolfSSL example with the “-help” option will print out full usage.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 18px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_8"><span style="font-size: 0px; position: relative; top: -8px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>3.  Switching Between Client and Server Tasks<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>The wolfSSL example uTasker client and server tasks have not been written to run at the same time.  As such, the following steps will switch the test being run between Client and/or Server:<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>In UTasker’s TaskConfig.h, add a line similar to one of the following two lines and recompile the uTasker project, depending on if you want the client example or server example to run.  This should be familiar to users familiar with adding a new task to a UTasker project.<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_4"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span><br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>/*{ &quot;x wolfSSL client&quot;, fnTLSClientTask, NO_QUE,(DELAY_LIMIT)(5 * SEC), (DELAY_LIMIT)(2 * SEC), UTASKER_STOP }, */<br/></p>
</li>
<li style="line-height: 15px; padding-left: 15px; text-indent: -15px; " class="full-width">
<p style="text-indent: -15px; " class="paragraph_style_15"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 15px; " class="inline-block"></span>/* { &quot;wolfSSL server&quot;, fnTLSServerTask, NO_QUE,(DELAY_LIMIT)(5 * SEC), (DELAY_LIMIT)(2 * SEC), UTASKER_STOP }, */<br/></p>
</li>
</ol>
<p class="paragraph_style_3"><br/></p>
<p class="paragraph_style_3">12. Additional Tuning Resources<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">The wolfSSL library has many different options for enabling and disabling features.  The default wolfSSL feature configuration has been used for this uTasker port, with the following non-default features enabled in settings.h:<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2"><span class="style_1">ECC</span> - Enabled so that applications have ECDHE_RSA cipher suites available. (HAVE_ECC, ECC_TIMING_RESISTANT, ALT_ECC_SIZE).<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2"><span class="style_1">Fastmath</span> - The fastmath math library has been enabled. This is faster than the normal big integer library.  RAM usage in total is roughly the same as the normal big integer library, but fastmath puts more on the stack and less on the heap.  Peak expected RAM usage can be found in the wolfSSL Resource Use document. (USE_FAST_MATH, TFM_TIMING_RESISTANT).<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">Please reference the <a title="Docs-wolfssl-manual-toc.html" href="Docs-wolfssl-manual-toc.html">wolfSSL Manual</a> for a complete list of features available.<br/></p>
<p class="paragraph_style_3"><br/></p>
<p class="paragraph_style_3">13. Support<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2">Please contact <a title="mailto:support@wolfssl.com" href="https://www.wolfssl.com/cdn-cgi/l/email-protection#a5d6d0d5d5cad7d1e5d2cac9c3d6d6c98bc6cac8"><span class="__cf_email__" data-cfemail="60131510100f121420170f0c0613130c4e030f0d">[email&#160;protected]</span><script data-cfhash='f9e31' type="text/javascript">/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */</script></a> with any questions about using wolfSSL with uTasker.  For licensing and business inquiries, please contact <a title="mailto:info@wolfssl.com" href="https://www.wolfssl.com/cdn-cgi/l/email-protection#aac3c4ccc5eaddc5c6ccd9d9c684c9c5c7"><span class="__cf_email__" data-cfemail="a0c9cec6cfe0d7cfccc6d3d3cc8ec3cfcd">[email&#160;protected]</span><script data-cfhash='f9e31' type="text/javascript">/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */</script></a>.<br/></p>
<p class="paragraph_style_2"><br/></p>
<p class="paragraph_style_2"><br/></p>
<p style="padding-bottom: 0pt; " class="paragraph_style_16">Copyright 2017 wolfSSL Inc.  All rights reserved.</p>
</div>
</div>
</div>
<div id="id3" style="height: 26px; left: 193px; position: absolute; top: 122px; width: 268px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_268_26" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_17"><a class="class1" title="Docs.html" href="Docs.html">Docs</a> <span class="style_5">-&gt;</span> <span class="style_6">Using wolfSSL with uTasker</span></p>
</div>
</div>
</div>
<div style="height: 1px; width: 698px;  height: 1px; left: 37px; position: absolute; top: 210px; width: 698px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 698px; ">
<img src="Docs-wolfssl-utasker_files/shapeimage_1.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 698px; "/>
</div>
</div>
<div style="height: 37px; width: 545px;  height: 37px; left: 191px; position: absolute; top: 80px; width: 545px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 545px; ">
<img src="Docs-wolfssl-utasker_files/shapeimage_2.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 545px; "/>
</div>
</div>
<div id="id4" style="height: 25px; left: 200px; position: absolute; top: 84px; width: 43px; z-index: 1; " class="style_SkipStroke_1 shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_43_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_18"><a class="class2" title="Home.html" href="Home.html">Home</a></p>
</div>
</div>
</div>
<div id="id5" style="height: 25px; left: 365px; position: absolute; top: 84px; width: 72px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_72_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_19"><a class="class3" title="https://wolfssl.com/wolfSSL/download/downloadForm.php" href="https://wolfssl.com/wolfSSL/download/downloadForm.php">Download</a></p>
</div>
</div>
</div>
<div id="id6" style="height: 25px; left: 439px; position: absolute; top: 84px; width: 59px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_59_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_19"><a class="class4" title="License.html" href="License.html">License</a></p>
</div>
</div>
</div>
<div id="id7" style="height: 25px; left: 499px; position: absolute; top: 84px; width: 44px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_44_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_19"><a class="class5" title="Blog/Blog.html" href="Blog/Blog.html">Blog</a></p>
</div>
</div>
</div>
<div id="id8" style="height: 25px; left: 589px; position: absolute; top: 84px; width: 80px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_80_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_19"><a class="class6" title="Community.html" href="Community.html">Community</a></p>
</div>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 245px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-utasker_files/shapeimage_3.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 296px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-utasker_files/shapeimage_4.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 363px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-utasker_files/shapeimage_5.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 438px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-utasker_files/shapeimage_6.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 498px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-utasker_files/shapeimage_7.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 589px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-utasker_files/shapeimage_8.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div id="id9" style="height: 25px; left: 671px; position: absolute; top: 84px; width: 61px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_61_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_19"><a class="class7" title="Contact.html" href="Contact.html">Contact</a></p>
</div>
</div>
</div>
<div id="id10" style="height: 25px; left: 249px; position: absolute; top: 84px; width: 44px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_44_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_18"><a class="class8" title="About.html" href="About.html">About</a></p>
</div>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 670px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-utasker_files/shapeimage_9.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div id="id11" style="height: 25px; left: 298px; position: absolute; top: 84px; width: 63px; z-index: 1; " class="style_SkipStroke_1 shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_63_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_19"><a class="class9" title="Products.html" href="Products.html">Products</a></p>
</div>
</div>
</div>
<div id="id12" style="height: 25px; left: 549px; position: absolute; top: 84px; width: 41px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_41_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_18"><a class="class10" title="Docs.html" href="Docs.html">Docs</a></p>
</div>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 545px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-utasker_files/shapeimage_10.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 16px; width: 20px;  height: 16px; left: 706px; position: absolute; top: 51px; width: 20px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 20px; ">
<img src="Docs-wolfssl-utasker_files/shapeimage_11.png" alt="" style="height: 16px; left: 0px; position: absolute; top: 0px; width: 20px; "/>
</div>
</div>
<div style="height: 19px; width: 19px;  height: 19px; left: 707px; position: absolute; top: 25px; width: 19px; z-index: 1; " class="tinyText style_SkipStroke_2">
<img src="Docs-wolfssl-utasker_files/United%20Kingdom(Great%20Britain).png" alt="" style="border: none; height: 19px; width: 19px; "/>
</div>
<div id="id13" style="height: 23px; left: 328px; position: absolute; top: 48px; width: 258px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_258_23" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_20">Questions? +1 (425) 245-8247</p>
</div>
</div>
</div>
<div style="height: 19px; width: 19px;  height: 19px; left: 685px; position: absolute; top: 25px; width: 19px; z-index: 1; " class="tinyText style_SkipStroke_2">
<a href="http://www.wolfssl.jp/" title="http://www.wolfssl.jp"><img src="Docs-wolfssl-utasker_files/japan.png" alt="" style="border: none; height: 19px; width: 19px; "/></a>
</div>
<div id="id14" style="height: 28px; left: 593px; position: absolute; top: 44px; width: 119px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_119_28" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_21"><a class="class11" title="https://www.wolfssl.com/forums" href="https://www.wolfssl.com/forums">Support <span class="style_7">Forums</span></a></p>
</div>
</div>
</div>
<div style="height: 121px; width: 155px;  height: 121px; left: 32px; position: absolute; top: 5px; width: 155px; z-index: 1; " class="tinyText style_SkipStroke_2">
<a href="Home.html" title="Home.html"><img src="Docs-wolfssl-utasker_files/wolfssl_logo.png" alt="" style="border: none; height: 121px; width: 156px; "/></a>
</div>
<div style="height: 6038px; line-height: 6038px; " class="spacer"> </div>
</div>
<div style="height: 100px; margin-left: 0px; position: relative; width: 770px; z-index: 15; " id="footer_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
</div>
</div>
</div>
 <script type="text/javascript">/* <![CDATA[ */(function(d,s,a,i,j,r,l,m,t){try{l=d.getElementsByTagName('a');t=d.createElement('textarea');for(i=0;l.length-i;i++){try{a=l[i].href;s=a.indexOf('/cdn-cgi/l/email-protection');m=a.length;if(a&&s>-1&&m>28){j=28+s;s='';if(j<m){r='0x'+a.substr(j,2)|0;for(j+=2;j<m&&a.charAt(j)!='X';j+=2)s+='%'+('0'+('0x'+a.substr(j,2)^r).toString(16)).slice(-2);j++;s=decodeURIComponent(s)+a.substr(j,m-j)}t.innerHTML=s.replace(/</g,'&lt;').replace(/>/g,'&gt;');l[i].href='mailto:'+t.value}}catch(e){}}}catch(e){}})(document);/* ]]> */</script></body>

<!-- Mirrored from www.wolfssl.com/wolfSSL/Docs-wolfssl-utasker.html by HTTrack Website Copier/3.x [XR&CO'2014], Tue, 17 Jan 2017 13:29:11 GMT -->
</html>
